package TDALista;

import java.util.Iterator;
import java.util.NoSuchElementException;


/**
 * Iterador de lista
 * @author Jordan
 *
 * @param <E>
 */
public class IteradorListaSE<E> implements Iterator<E> {
	  
	/** Lista sobre la cual se avanza. */
	protected PositionList<E> list; // the underlying list
	/** Posición del nodo actual.*/
	protected Position<E> cursor; // the next position
  
	/** Constructor del iterador.
	 * @param L Lista que se recorre.*/
	public IteradorListaSE(PositionList<E> L) {
		list = L;
		if(list.isEmpty()) cursor= null;
		else
			cursor= list.first();
			    
		}
  
	/** Devuelve verdadero si el cursor no se paso del ultimo elemento, falso en caso contrario.
	 * @return true si el cursor no se paso del ultimo elemento, false en caso contrario.	 */
	public boolean hasNext() { 
		return (cursor != null); 
	}
  
	/** Avanza una posición en la lista y retorna el antiguo elemento del cursor.
	 * @return Elemento del nodo actual.*/
	public E next() {
		if (cursor == null)
			try {
				throw new NoSuchElementException("next:: No hay siguiente elemento");
			} catch (NoSuchElementException e1) {}
    
		E toReturn = cursor.getElement();
    
    
    	if(cursor == list.last())
				cursor= null;
			else
				try {
					cursor= list.next(cursor);
				} catch (BoundaryViolationException e) {}
				catch (InvalidPositionException e) {}
		    
    	return toReturn;
	}

	public void remove() {}
  
}
